home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / comm / msged400.zip / src / vsevops.c < prev    next >
C/C++ Source or Header  |  1996-06-22  |  5KB  |  201 lines

  1. /*
  2.  *  VSEVOPS.C
  3.  *
  4.  *  Written by Paul Edwards and released to the public domain.
  5.  *
  6.  *  Perform Version7 nodelist lookup operations.
  7.  */
  8.  
  9. #include "mxbt.h"
  10. #include "vsev.h"
  11. #include "msged.h"
  12. #include "strextra.h"
  13.  
  14. static int compareSysop(void *a, void *b, int len)
  15. {
  16.     return strncmpi((char *)a, (char *)b, len);
  17. }
  18.  
  19. static int compareNode(void *a, void *b, int len)
  20. {
  21.     struct
  22.     {
  23.         short zone;
  24.         short net;
  25.         short node;
  26.         short point;
  27.     }
  28.     v7addr;
  29.     ADDRESS *addrp;
  30.  
  31.     addrp = (ADDRESS *) b;
  32.     memcpy(&v7addr, a, len);
  33.     if (len <= 6)
  34.     {
  35.         v7addr.point = 0;
  36.     }
  37.     if (v7addr.zone < addrp->zone)
  38.         return -1;
  39.     else if (v7addr.zone > addrp->zone)
  40.         return 1;
  41.     else if (v7addr.net < addrp->net)
  42.         return -1;
  43.     else if (v7addr.net > addrp->net)
  44.         return 1;
  45.     else if (v7addr.node < addrp->node)
  46.         return -1;
  47.     else if (v7addr.node > addrp->node)
  48.         return 1;
  49.     else if (v7addr.point < addrp->point)
  50.         return -1;
  51.     else if (v7addr.point > addrp->point)
  52.         return 1;
  53.     else
  54.         return 0;
  55. }
  56.  
  57. /*
  58.  *  The following stuff was written by John Dennis (with mods by Paul 
  59.  *  Edwards) and was also released to the public domain.
  60.  */
  61.  
  62. char *v7lookupnode(ADDRESS * faddr, char *name)
  63. {
  64.     long record;
  65.     char index_filename[FILENAME_MAX];
  66.     char data_filename[FILENAME_MAX];
  67.     MXBT mxbt;
  68.     VSEV vsev;
  69.  
  70.     strcpy(index_filename, ST->nodepath);
  71.     strcat(index_filename, "\\");
  72.     if (ST->nodebase != NULL)
  73.     {
  74.         strcat(index_filename, ST->nodebase);
  75.     }
  76.     strcat(index_filename, ".NDX");
  77.     strcpy(data_filename, ST->nodepath);
  78.     strcat(data_filename, "\\");
  79.     if (ST->nodebase != NULL)
  80.     {
  81.         strcat(data_filename, ST->nodebase);
  82.     }
  83.     strcat(data_filename, ".DAT");
  84.  
  85.     record = mxbtOneSearch(&mxbt, index_filename, (void *)faddr, compareNode);
  86.  
  87.     if (record == -1)
  88.         return NULL;
  89.  
  90.     if (vsevGetInfo(&vsev, data_filename, record) == 0)
  91.     {
  92.         strcpy(name, (char *)vsev.sysop);
  93.         return name;
  94.     }
  95.     else
  96.         return NULL;
  97. }
  98.  
  99. ADDRESS v7lookup(char *name)
  100. {
  101.     ADDRESS faddr;
  102.     char reverse[80];
  103.     long record;
  104.     char index_filename[FILENAME_MAX];
  105.     char data_filename[FILENAME_MAX];
  106.     MXBT mxbt;
  107.     VSEV vsev;
  108.  
  109.     faddr = CurArea.addr;
  110.     faddr.domain = NULL;
  111.  
  112.     makeReverse(reverse, name);
  113.  
  114.     strcpy(index_filename, ST->nodepath);
  115.     strcat(index_filename, "\\");
  116.     if (ST->sysop != NULL)
  117.     {
  118.         strcat(index_filename, ST->sysop);
  119.     }
  120.     strcpy(data_filename, ST->nodepath);
  121.     strcat(data_filename, "\\");
  122.     if (ST->nodebase != NULL)
  123.     {
  124.         strcat(data_filename, ST->nodebase);
  125.     }
  126.     strcat(data_filename, ".DAT");
  127.  
  128.     record = mxbtOneSearch(&mxbt, index_filename, (void *)reverse, compareSysop);
  129.  
  130.     if (record == -1)
  131.     {
  132.         faddr.notfound = 1;
  133.         return faddr;
  134.     }
  135.     if (vsevGetInfo(&vsev, data_filename, record) != 0)
  136.     {
  137.         faddr.notfound = 1;
  138.         return faddr;
  139.     }
  140.     faddr.zone = vsev.zone;
  141.     faddr.net = vsev.net;
  142.     faddr.node = vsev.node;
  143.     faddr.point = vsev.point;
  144.     faddr.notfound = 0;
  145.  
  146.     return faddr;
  147. }
  148.  
  149. char *v7lookupsystem(ADDRESS * faddr, char *system)
  150. {
  151.     long record;
  152.     int is_point = 0;
  153.     char index_filename[FILENAME_MAX];
  154.     char data_filename[FILENAME_MAX];
  155.     MXBT mxbt;
  156.     VSEV vsev;
  157.  
  158.     strcpy(index_filename, ST->nodepath);
  159.     strcat(index_filename, "\\");
  160.     if (ST->nodebase != NULL)
  161.     {
  162.         strcat(index_filename, ST->nodebase);
  163.     }
  164.     strcat(index_filename, ".NDX");
  165.     strcpy(data_filename, ST->nodepath);
  166.     strcat(data_filename, "\\");
  167.     if (ST->nodebase != NULL)
  168.     {
  169.         strcat(data_filename, ST->nodebase);
  170.     }
  171.     strcat(data_filename, ".DAT");
  172.  
  173.     if (faddr->point)
  174.     {
  175.         is_point = faddr->point;
  176.         faddr->point = 0;
  177.     }
  178.  
  179.     record = mxbtOneSearch(&mxbt, index_filename, (void *)faddr, compareNode);
  180.  
  181.     if (is_point)
  182.         faddr->point = is_point;
  183.  
  184.     if (record == -1)
  185.         return NULL;
  186.  
  187.     if (vsevGetInfo(&vsev, data_filename, record) == 0)
  188.     {
  189.         strcpy(system, (char *)vsev.board);
  190.         if (is_point)
  191.         {
  192.             strcat(system, " (point)");
  193.         }
  194.         return system;
  195.     }
  196.     else
  197.     {
  198.         return NULL;
  199.     }
  200. }
  201.